Commit Diff


commit - 1f96f0c8bf727e636246cfd8122e84b4b302e018
commit + 7ede00c0aec0123121b227d49634e9faa58e08c7
blob - ef81a50ef59156ae9ff33c71eca798692076ce57
blob + 31cf3f50f05c461adf400c4bc7a275beceb12464
--- README.md
+++ README.md
@@ -7,6 +7,19 @@
 _merge = 'deep'
 ```
 
+## Параметры
+Все используемые параметры должны содержаться в настройках сайта в .Params.radium
+
+publisher
+: ссылка на профиль публикатора для элементов JSON-LD.
+external_rel
+: rel по умолчанию для абсолютных ссылок.
+
+## render hooks
+### render-link
+Вставляет ссылку с разрешённым назначением ссылки.
+Для абсолютных ссылок указывает rel из настроек сайта или значение по умолчанию `noopener noreferrer external`.
+
 ## Шаблоны
 ### baseof
 Базовый шаблон, включающий индексирование Pagefind только для main тега.
@@ -17,6 +30,11 @@ _merge = 'deep'
 
 ## Partials
 
+### element
+Создаёт HTML элемент, с именем тэга = .tag, атрибутами = .attributes, содержимым .inner.
+
+Если тэг не установлен, то проставляется значение по умолчанию `tag`.
+
 ### image
 Отображает изображение, передаваемое в .image.
 .image должен быть ресурсом, полученным через .Resources.Get* или resources.Get*.
@@ -67,10 +85,18 @@ _merge = 'deep'
 ```
 
 #### Статья
-Для указания publisher в статье укажите publisher в Params страницы, либо в настройках сайта в site.Params.radium.publisher
+Для указания publisher в статье укажите publisher в Params страницы, либо в настройках сайта.
 
 ## Shortcodes
 ### details
 Корректный details, позволяющий рендерить html.
 
 Аналогично [стандартному](https://gohugo.io/shortcodes/details/#article) shortcode, за исключением способа вызова — необходимо использовать вызов {{% details %}} для рендера внутреннего текста в качестве Markdown.
+
+### a
+Создаёт ссылку с атрибутами href, class, id, rel.
+
+Полезно для установки rel.
+
+Вызывает partial/element.
+Если необходимы другие атрибуты, то переопределите этот shortcode.
blob - /dev/null
blob + 51f2deee8d2dede3520ed4b14f73c618e8924087 (mode 644)
--- /dev/null
+++ layouts/_partials/element.html
@@ -0,0 +1,9 @@
+{{- $tag   := default "div" .tag -}}
+{{- $attrs := "" -}}
+{{- with .attributes -}}
+  {{- range $k, $v := . -}}
+    {{- $attrs = printf `%s %s=%q` $attrs $k $v -}}
+  {{- end -}}
+{{- end -}}
+
+{{- printf "<%s%s>%s</%s>" $tag $attrs (default "" .inner) $tag | safeHTML -}}
blob - /dev/null
blob + 0b2e9363e52a65a20fd412838e2e108cefacb55a (mode 644)
--- /dev/null
+++ layouts/_markup/render-link.html
@@ -0,0 +1,32 @@
+{{- $p := .Page -}}
+{{- with .PageInner -}}{{- $p = . -}}{{- end -}}
+
+{{- $href := .Destination -}}
+
+{{- with $p.GetPage $href -}}
+  {{- $href = .RelPermalink -}}
+{{- else -}}
+  {{- with $p.Resources.Get $href -}}
+    {{- $href = .RelPermalink -}}
+  {{- else -}}
+    {{- with resources.Get $href -}}
+      {{- $href = .RelPermalink -}}
+    {{- end -}}
+  {{- end -}}
+{{- end -}}
+
+{{- $rel := "" -}}
+{{- if (urls.Parse $href).IsAbs }}
+  {{- if isset (default (dict) site.Params.radium) "external_rel" -}}
+    {{- $rel = site.Params.radium.external_rel -}}
+  {{- else -}}
+    {{- $rel = "noopener noreferrer external" -}}
+  {{- end -}}
+{{- end -}}
+
+<a href="{{ $href | safeURL }}"
+  {{- with .Title }} title="{{ . }}"{{ end -}}
+  {{- with $rel }} rel="{{ . }}"{{ end -}}
+>
+  {{ .Text }}
+</a>
blob - /dev/null
blob + 5676ce2443a0c996549fa63f508a44195ca86e2d (mode 644)
--- /dev/null
+++ layouts/_shortcodes/a.html
@@ -0,0 +1,26 @@
+{{- $allowed := slice
+  "href"
+  "title"
+  "rel"
+  "target"
+  "class"
+  "id"
+  "download"
+  "referrerpolicy"
+  "hreflang"
+  "type"
+  "role"
+  "tabindex"
+  "aria-label"
+  "aria-current"
+  "aria-describedby"
+-}}
+{{- $attributes := dict -}}
+{{- range $allowed -}}
+    {{- $value := $.Get . -}}
+    {{- if $value -}}
+        {{- $attributes = merge $attributes (dict . $value) -}}
+    {{- end -}}
+{{- end -}}
+
+{{- partial "element.html" (dict "tag" "a" "inner" .Inner "attributes" $attributes) -}}